import axios from 'axios'
import Qs from 'qs'
import store from '@/store'
import { encrypt } from './encrypt'
import md5 from './md5'
// baseURL地址，例如：https://161.1.896.285/
// process.env.BASE_URL是获取到package.json配置的和
// nuxt.config.js的env相关联系
// 因为这里配置了env环境，所以process.env.BASE_URL这么写
// axios.defaults.baseURL = process.env.BASE_URL;
// post请求头，影响不大，可写可不写
// axios.defaults.headers.post["Content-Type"] =
//   "application/x-www-form-urlencoded";
// todo 生产需要更换\
//const baseUrl = 'http://192.168.2.19:7777' //本地
const baseUrl = 'http://wbl.hifuncat.com' // 测试
    // const baseUrl = 'https://api.tixi.benhu.cn' // 生产

const FORM = 'application/x-www-form-urlencoded'
    // 请求拦截器
axios.interceptors.request.use(
    async(config) => {
        // 根据自己项目配置请求头token，需要与后端配合名字
        // const token = store.state.token
        if (store.state.token) {
            config.headers['userToken'] = store.state.token
        }
        return config
    },
    (error) => {
        return Promise.reject(error)
    }
)

// 响应拦截器
axios.interceptors.response.use(
        (response) => {
            // 这里可以根据浏览器返回的status状态码去判断
            // 这里只举例了200的情况
            if (response.status === 200) {
                return response
            } else {
                return Promise.reject(response)
            }
        },
        (error) => {
                // 根据接口返回的去提示对应的
                // Message({
                //   message: error.response.data.error,
                //   type: 'error',
                //   duration: 5 * 1000
                // })
                // 我这里10030是token失效，其他的根据后端接口返回去写判断
                // if (error.response.data.status === 10030) {
                //   removeToken() 这是我封装的token方法，不需要复制
                // 跳转到登录页
                //   window.location.href = `/login`
                // }
            return Promise.reject(error)
        }
    )
    /**
     * 封装get方法，对应get请求
     * @param {String} url [请求的url地址]
     * @param {Object} params [请求时携带的参数]
     */
export const get = (url, params, contentType, noBaseUrl) => {
    let timestamp = parseInt(new Date().getTime() / 1000) + '' //获取10位时间戳
    let SIGN_KEY = 'hWbV7kxwfhW0LPrBkb2aOsYu9iM4W8eq'
    return new Promise((resolve, reject) => {
        axios
            .get((noBaseUrl ? '' : baseUrl) + url, {
                params: params,
                headers: {
                    'Content-Type': contentType ? contentType : FORM,
                    Timestamp: timestamp,
                    sign: encrypt(md5.hex_md5(timestamp) + SIGN_KEY)
                }
            })
            .then((res) => {
                if (res.data.status !== '0000') {
                    res.data.success = false
                } else {
                    res.data.success = true
                }
                resolve(res.data)
            })
            .catch(function(error) {
                if (error.response) {
                    reject(error.response.data)
                }
            })
    })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export const post = (url, params, contentType) => {
    let timestamp = parseInt(new Date().getTime() / 1000) + '' //获取10位时间戳
    let SIGN_KEY = 'hWbV7kxwfhW0LPrBkb2aOsYu9iM4W8eq'
    let formatParams
    if (!contentType) {
        formatParams = Qs.stringify(params)
    }
    return new Promise((resolve, reject) => {
        axios
            .post(baseUrl + url, contentType ? params : formatParams, {
                headers: {
                    'Content-Type': contentType ? contentType : FORM,
                    Timestamp: timestamp,
                    sign: encrypt(md5.hex_md5(timestamp) + SIGN_KEY)
                }
            })
            .then((res) => {
                if (res.data.status !== '0000') {
                    res.data.success = false
                } else {
                    res.data.success = true
                }
                resolve(res.data)
            })
            .catch(function(error) {
                if (error.response) {
                    reject(error.response.data)
                }
            })
    })
}
export const downd = (url, params, contentType) => {
        let formatParams
        if (!contentType) {
            formatParams = Qs.stringify(params)
        }
        return new Promise((resolve, reject) => {
            axios
                .post(baseUrl + url, contentType ? params : formatParams, {
                    headers: {
                        'Content-Type': contentType ? contentType : FORM,
                        port: store.state.platform
                    },
                    responseType: 'blob'
                })
                .then((res) => {
                    if (res.status !== '0000') {
                        res.status = false
                    } else {
                        res.status = true
                    }
                    resolve(res)
                })
                .catch(function(error) {
                    if (error.response) {
                        reject(error.response.data)
                    }
                })
        })
    }
    // delete，put等方法同理，这里只举例最常见的get和post请求
export const deleteRequest = (url, params, contentType, noBaseUrl) => {
    return new Promise((resolve, reject) => {
        axios
            .delete((noBaseUrl ? '' : baseUrl) + url, {
                params: params,
                headers: {
                    'Content-Type': contentType ? contentType : FORM,
                    port: store.state.platform
                }
            })
            .then((res) => {
                if (res.data.status !== '0000') {
                    res.data.success = false
                } else {
                    res.data.success = true
                }
                resolve(res.data)
            })
            .catch(function(error) {
                if (error.response) {
                    reject(error.response.data)
                }
            })
    })
}